/*
 * Copyright (c) 2020 solidwang. All rights reserved.
 */

package com.solidwang.jpa.service;

import com.solidwang.jpa.model.Vde;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface VdeRepository extends JpaRepository<Vde, Integer> {

    //@Query是用来配置自定义SQL的注解，后面参数nativeQuery = true才是表明了使用原生的sql，如果不配置，默认是false，则使用HQL查询方式。
    //HRL查询，查询全部信息，注意HRL查询的是实体类的名称，不是数据表的名称，特别注意这一点
    @Modifying
    @Query(value = "update vde v set v.imei=?1 where v.id=?2",nativeQuery = true)
    int updateImeiById(String imei,Integer id);

    //原生sql查询
    @Query(value = "select id  from vde where id = (SELECT MAX(id) from vde)", nativeQuery = true)
    public Integer queryMaxId();

    //hql查询
    @Query(value = "from Vde v where v.imei=?1 and v.model=?2")
    public Vde findByImeiAndModelFromHql(String imei, String model);

    //？查询
    @Query(value = "select * from vde v where v.imei=?1 and v.model=?2", nativeQuery = true)
    public Vde findByImeiAndModelFromSql(String imei, String model);

    //param查询
    @Query(value = "from Vde v where v.imei=:imei and v.imsi=:imsi")
    public Vde findByImeiAndImsiFromParam(@Param("imei") String imei, @Param("imsi") String imsi);

    //展示like模糊查询
    @Query(value = "from Vde v where v.imei like %:imeiLike%")
    List<Vde> findByImeiLike(@Param("imeiLike")String imeiLike);

    //展示使用Spring自带分页查询
    @Query(value = "select * from vde v" ,nativeQuery = true)
    Page<Vde> findAllPage(Pageable pageable);

    //展示带有条件的分页查询
    @Query(value = "from Vde v where v.imei like %:imeiLike%")
    Page<Vde> findPageLikeImeiByHql(Pageable pageable, @Param("imeiLike")String imeiLike);

    //展示带有条件的分页查询
    @Query(value = "select *  from vde v where v.imei like %:imeiLike%",nativeQuery = true)
    Page<Vde> findPageLikeImeiBySql(Pageable pageable, @Param("imeiLike")String imeiLike);

}

